;(function () {
    var $form_add_task = $('.add-task')
        ,$window=$(window)
        ,$body=$('body')
        ,task_list = []
        ,$tadk_delete_trigge
        ,$tsdk_detail_trigge
        ,$task_detail=$('.task-detail')
        ,$task_detail_mask=$('.task-detail-mask')
        ,current_index
        ,$updata_form
        ,$updata_detail_content
        ,$updata_detail_content_input
        ,$checkbox_complete
        ,$msg=$('.msg')
        ,$alert=$('.alert')
        ,$msg_content=$msg.find('.msg-content')
        ,$msg_confirm=$msg.find('.comfirmed')
        ;
    'use strict';

    init();


    $form_add_task.on('submit',on_add_task_form_submit);
    $task_detail_mask.on('click',hide_task_detail);


    function my_pop(arg) {
        if(!arg)
        {
            console.error('pop title is required');
        }
        var conf={}
            ,$box
            ,$mask
            ,$title
            ,$content
            ,$confirm
            ,$cancle
            ,dfd
            ,confirmed
            ,timer
            ;
        dfd=$.Deferred();
        //dfd.resolve();

        if (typeof arg=='string')
            conf.title=arg;
        else {
            conf=$.extend(conf,arg);
        }

        $box=$('<div>' +
            '<h3 class="pop-title text-center">'+conf.title+'</h3>' +
            '<div class="pop-content">' +

            '<p class="text-right">' +
            '<button class="confirm btn btn-danger">确 认</button> ' +
            '<button class="cancle btn btn-primary">取 消</button>' +
            '</p>' +
            '</div>'+
            '</div>')
            .css({
                width:500,
                height:'auto',
                background:'#f1f1f1',
                position: 'fixed',
                color:'#333',
                'border-radius':3,
                'box-shadow':'1px 3px 5px rgba(0,0,0,.5)'
            });
        $mask=$('<div></div>')

            .css({
                position:'fixed',
                background:'rgba(111,123,195,.5)',
                left:0,
                right:0,
                top:0,
                bottom:0

            });

        $content=$box.find('.pop-content').css({
            padding:'5px 10px',
            'font-weight':300,

        });

        $confirm=$content.find('button.confirm');
        $cancle=$content.find('button.cancle');


        $window.on('resize',function () {
            adjust_box_position();
        });

        timer=setInterval(function () {
            if(confirmed !== undefined) {
                dfd.resolve(confirmed);
                clearInterval(timer);
                dismis_my_pop();
            }
        },50);


        function on_confirmed() {
            confirmed = true;
        }

        function on_cancle() {
            confirmed = false;
         }

        function adjust_box_position() {
            var  window_width=$window.width()
                 ,window_height=$window.height()
                 ,box_height=$box.height()
                 ,box_width=$box.width()
                 ,move_x
                 ,move_y
                 ;
            move_x=(window_width-box_width)/2;
            move_y=(window_height-box_height)/2-50;
            $box.css({
                left:move_x,
                top:move_y,

            })
        }

        $mask.appendTo($body);
        $box.appendTo($body);
        $confirm.on('click',on_confirmed);
        $cancle.on('click',on_cancle);
        $mask.on('click',on_cancle);
        $window.resize();

        function dismis_my_pop() {
            $mask.remove();
            $box.remove();
        }

        return dfd.promise();
    }


    /*点击我知道了按钮后隐藏提醒*/
    function listen_msg_event() {
        $msg_confirm.on('click', function () {
            hide_msg();
        })
    }
    /*添加新task*/
    function on_add_task_form_submit(e) {
        var new_task = {}, $input;
        /*禁用默认行为 //*/
        e.preventDefault();

        $input = $(this).find('input[name=content]');

        /*获取新task的值*/
        new_task.content = $input.val();

        /*如果新task的值为空 直接返回 否则继续执行*/
        if (!new_task.content) return;

        /*存入新task*/
        if (add_task(new_task)) {

            $input.val(null);
        }
    }

    /*初始化task*/
    function init() {
        task_list=store.get('task_list') || [];
        listen_msg_event();
        if(task_list.length)
            render_task_list();
        task_remind_date();


    }

    /*对比task时间到时提醒*/
    function task_remind_date() {
        var current_timestamp;

        var itl=setInterval(function () {
            for(var i=0; i<task_list.length;i++){
                var item=get(i),task_timestamp;
                if (!item || !item.remind_date || item.informed)
                    continue;

                current_timestamp=(new Date()).getTime();
                task_timestamp=(new Date(item.remind_date)).getTime();

                if(current_timestamp-task_timestamp>=1){
                    updata_task_detail(i,{informed:true});
                    show_msg(item.content);
                }

            }
        },500)

    }

    /*弹出提醒框*/
    function show_msg(msg) {

        if(!msg) return;
        $msg_content.html(msg);
        $alert.get(0).play();
        $msg.show();
    }
    /*隐藏提醒框*/
    function hide_msg() {
        $msg.hide();
    }

    /*查找并监听所有删除按钮的点击事件*/
    function listen_task_delete() {
        $tadk_delete_trigge.on('click', function () {
            var $this = $(this);
            /*找的删除按钮的task元素*/
            var $item = $this.parent().parent();
            var indext = $item.data('index');
            /*确认删除*/
            my_pop('确定删除吗?')
                .then(
                function (r) {
                    r ? delete_task(indext) : null;
                }
            );

        });
    }

    /*查找并监听所有详情按钮的点击事件*/
    function listen_task_detail() {

        var $task_title=$('.task-item');
        $tsdk_detail_trigge.on('click',function () {
            var $this=$(this);
            var $item = $this.parent().parent();
            var indext = $item.data('index');
            show_task_detail(indext);

        });
        /*双击task标题后显示详情*/
        $task_title.on('dblclick',function () {
            var index=$(this).data('index');
            show_task_detail(index);
        });
    }

    /*监听任务状态并标记*/
    function listen_checkbox_complete() {

        $checkbox_complete.on('click', function (){
            var $this=$(this);
            //var is_complete=$this.is(':checked');
            var index=$this.parent().parent().data('index');
            var item=get(index);

            if(item.complete)
                updata_task_detail(index,{complete:false});
                //$this.prop('checked',true);

            else
                updata_task_detail(index,{complete:true});
                //$this.prop('checked',false);

        });

    }
    /*获取任务状态数据*/
    function get(index) {
        return store.get('task_list')[index];

    }

    /*显示选择的详情index*/
    function show_task_detail(index) {
        /*生成选中的详情模版*/
        render_task_idetail(index);
        current_index=index;

        /*显示详情页面(默认隐藏)*/
        $task_detail.show();

        /*显示详情模版背景板(默认隐藏)*/
        $task_detail_mask.show();
        
    }
    /*更新详情模版*/
    function updata_task_detail(index,data) {
        if(!task_list[index]||!index) return;
        task_list[index]=$.extend({}, task_list[index],data);
        reflash_task_list();

    }
    /*隐藏task详情*/
    function hide_task_detail() {
        $task_detail.hide();
        $task_detail_mask.hide();

    }

    /*添加一条task*/
    function add_task(new_task) {

        /*for(var k in new_task){
            if (new_task[k]=== undefinde)
                new_task[k]='' ;
        }*/

        /*将新task推入task_list*/

        task_list.push(new_task);


        reflash_task_list();

        /*更新localStorage*/

        return true;
    }

    /*删除对应的task*/
    function  delete_task(index) {
        /*如果没有index,或者index不存在则直接返回*/
        if(index==undefined || !task_list[index]) return;

        delete task_list[index];

        reflash_task_list();
    }

    /*刷新loaclStorage数据并渲染task模版*/
    function reflash_task_list() {
        store.set('task_list',task_list);
        render_task_list();
    }

    /*渲染全部task列表模版*/
    function render_task_list() {
        var $task_lists = $('.task-list');
        var $item_complet=[];
        $task_lists.html('');
        for(var i=0; i<task_list.length; i++) {

            var item = task_list[i];
            if (item && item.complete)
                $item_complet[i]=item;
            else
                var $tasks = render_task_item(item, i);

            $task_lists.prepend($tasks);
        }

        for(var j=0; j<$item_complet.length; j++){
            $tasks = render_task_item($item_complet[j], j);

            if(!$tasks) continue;

            $tasks.addClass('completed');

            $task_lists.append($tasks);


        }

        $tadk_delete_trigge=$('.action.delete');

        $tsdk_detail_trigge=$('.action.detail');

        $checkbox_complete=$('.task-item .complete[type=checkbox]');

        listen_task_delete();

        listen_task_detail();

        listen_checkbox_complete();

    }

    /*渲染taskl列表模版*/
    function render_task_item(data,index) {
        if(!data || !index) return;
        var list_item_tpl =
            '<div class="task-item" data-index="'+index+'">' +
            '<span><input class="complete"'+(data.complete ? 'checked':'' ) +' type="checkbox"></span>' +
            '<span class="task-content">'+data.content+'</span>' +
            '<span class="fr">' +
            '<span class="action delete"> 删除 </span>' +
            '<span class="action detail">详情</span>' +
            '</span>' +
            '</div>';
        return $(list_item_tpl);

    }


    /*渲染单条task详情*/
    function render_task_idetail(index) {
        if( !task_list[index] || index === undefined) return;
        var item = task_list[index];

        var list_detail_tpl =
            '<form class="task-content input-item">'+
            '<div class="task-title">'+(item.content||'')+
            '</div>'+
            '<div class="input-item">'+
            '<input style="display:none;" type="text" name="content" value="'+''+item.content+'">'+
            '</div>'+
            '<div class="desc input-item">'+
            '<textarea name="desc">'+(item.desc||'')+'</textarea>'+
            '</div>'+
            '<span class="remind input-item">'+
            '<label>提醒时间</label>'+
            '<input class="task-dateTime" name="remind_date"' +
            ' type="text"'+
            ' value="'+(item.remind_date || '')+'">'+
            '<span><button type="submit">更新</button></span>'+
            '</div>'+
            '</form>';

        /*清空task详情模版*/
        $task_detail.html(null);
        /*替换新的详情模版*/
        $task_detail.html(list_detail_tpl);
        $('.task-dateTime').datetimepicker();

        /*选中form监听其中的submit事件*/
        $updata_form=$task_detail.find('form');
        /*选中task标题监听其中的双击事件*/
        $updata_detail_content=$updata_form.find('.task-title');
        /*监听task详情中的标题双击事件并调出修改的input*/
        $updata_detail_content.on("dblclick",function(){
            $updata_detail_content_input=$updata_form.find('[name=content]');
            $updata_detail_content_input.show();
            $updata_detail_content.hide();
        });
        /*监听更新按钮并提交更新的内容*/
        $updata_form.on('submit',function (e) {
            /*禁用默认行为 */
            e.preventDefault();
            // 获取表单中各个input的值
            var item_data={};
            item_data.content=$(this).find('[name=content]').val();
            item_data.desc=$(this).find('[name=desc]').val();
            item_data.remind_date=$(this).find('[name=remind_date]').val();
            //更新详情内容
            updata_task_detail(index,item_data);
            //更新提交后隐藏
            hide_task_detail();

        });
            




    }


})();